package com.framework.plm.bas.bs;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import com.framework.plm.bas.param.QueryParam;
import com.framework.plm.bas.util.CodeBuilder;
import com.framework.plm.bas.vo.BasConstant;
import com.framework.plm.dbs.vo.BaseObject;

//@SuppressWarnings("unchecked")
public interface IPlmBasBS {
	
    public static final String BEAN_ID="plmBasBS";
    
    /**
	 * 平台框架通过ID查询Hibernate对象
	 * @return
	 */
	public <T extends BaseObject> T queryById(Class<T> clazz, Serializable id);
	
	/**
	 * 平台框架Hibernate对象保存
	 * @param BaseObject
	 * @return int
	 */
	public int save(BaseObject object);

	/**
	 * 平台框架Hibernate对象批量保存
	 * @param List
	 * @return int
	 */
	public <T extends BaseObject> int saveByBatch(List<T> list);

	/**
	 * 平台框架Hibernate对象更新
	 * @param BaseObject
	 * @return
	 */
	public int update(BaseObject object);
	
	/**
	 * 平台框架Hibernate对象删除
	 * @param BaseObject
	 * @return int
	 */
	public int delete(BaseObject object);

	/**
	 * 平台框架Hibernate对象批量更新
	 * @param List
	 * @return int
	 */
	public <T extends BaseObject> int updateByBatch(List<T> list);
	
	/**
	 * 平台框架Hibernate对象批量删除
	 * @param List
	 * @return
	 */
	public <T extends BaseObject> int deleteByBatch(List<T> list);
	
	/**
	 * 平台框架Hibernate-NamedQuery更新
	 * @param queryId
	 * @param param
	 * @return int
	 */
	public int updateHiberateByNamedQuery(String queryId,Object[] param);
	
	/**
	 * 通过iBatis进行新建操作。
	 * @param statementId
	 * @param Object[]
	 * @return
	 */
	public int insertIbatisObj(String statementId, Object[] values);

	/**
	 * 通过iBatis进行删除操作。
	 * @param statementId
	 * @param Object[]
	 * @return
	 */
	public int deleteIbatisObj(String statementId, Object[] values);

	/**
	 * 通过iBatis进行修改操作。
	 * @param statementId
	 * @param Object[]
	 * @return
	 */
	public int updateIbatisObj(String statementId, Object[] values);
	
	/**
	 * 平台框架封装通用查询记录列表
	 * @param QueryParam
	 * @return List
	 */
	public <T> List<T> query(QueryParam qp);
	
	/**
	 * 平台框架封装通用查询记录列表
	 * @param params Map
	 * @return List
	 */
	public <T> List<T> query(String statementId, Object params );
	
	/**
	 * 平台框架封装通用查询总记录数
	 * @param params Map
	 * @return int
	 */
	public int querySize(String statementId, Object params);

	/**
	 * 平台框架封装通用查询总记录数
	 * @param QueryParam
	 * @return int
	 */
	public int querySize(QueryParam qp);
	
	/**
	 * 平台框架封装通用单记录查询
	 * @param QueryParam
	 * @return Object
	 */
	public <T> T queryOne(QueryParam qp);
	
	/**
	 * 平台框架封装通用单记录查询
	 * @param params	Map
	 * @return Object
	 */
	public <T> T queryOne(String statementId, Object params);

	/**
	 * 平台框架获取长整型主键
	 * @param keyName BAS_KEYS主键名称
	 * @return long
	 */
	public long txNewLongKey(String keyName);
	
	/**
	 * 平台框架获取String主键
	 * @param keyName BAS_KEYS主键名称
	 * @param boolean 是否填充0
	 * @return String
	 */
	public String txNewStringKey(String keyName, boolean isFillZero);
	
	/**
     * 获得配置中查询框架的每页显示记录条数。
     * @return
     */
    public int queryPageSize();
    
    /**
	 * 根据交易码取得交易对象。
	 * @param serviceCode 交易码。
	 * @param Generalparam
	 * @return PlmBasServiceVO
	 */
	public BasConstant[] queryConstant(String name);
	
	public BasConstant queryConstantOne(String name) ;
	
    /**
	 * 递增序列生成方式
	 * @param cb2
	 * @return
	 */
    
    public String incrementCode(CodeBuilder cb);

    /**
	 * 平台框架封装执行存储过程
	 * @param String 过程名称
	 * @param Map 系统参数
	 * @return Map 过程结果
	 */
	@SuppressWarnings("unchecked")
	public Map runProcedure(String procedureName, Map param);
	
	/**
	 * 取得新查询码。
	 * @return String 查询码。
	 */
	public String queryValidId();
	
	/**
	 * 清除系统临时表。
	 * @param String 查询码
	 * @return
	 */
	public void clearTempTable(String validId);
	
}